package ar.com.larreta.colegio.client.planesdepagos;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import ar.com.larreta.colegio.intercambio.client.Obligacion;
import ar.com.larreta.controlador.client.Invocador;
import ar.com.larreta.controlador.client.RetornoDeLlamada;
import ar.com.larreta.grilla.client.NumberCellRenderer;
import ar.com.larreta.grilla.client.SectorConGrilla;
import ar.com.larreta.grilla.client.ventanas.BotonBorrarPresionado;
import ar.com.larreta.intercambio.client.Respuesta;
import ar.com.larreta.intercambio.client.comunes.ProcesosConst;
import ar.com.larreta.vista.client.DialogError;
import ar.com.larreta.vista.client.Mensajes;
import ar.com.larreta.vista.client.Ventana;
import ar.com.larreta.vista.client.logs.Logger;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.google.gwt.i18n.client.DateTimeFormat;

public class SectorObligaciones extends SectorConGrilla {

	protected static Logger logger = new Logger(SectorObligaciones.class);
	
	public static final Integer ANCHO = 400;
	public static final Integer LARGO_DATOS = VentanaPlanesDePagos.LARGO_INFO + 22;
	public static final Integer LARGO_GRILLA = LARGO_DATOS - 50;
	
	private VentanaPlanesDePagos ventanaPlanesDePagos;
	
	private MenuItem botonDuplicar;
	
	public MenuItem getBotonDuplicar() {
		return botonDuplicar;
	}

	public SectorObligaciones(VentanaPlanesDePagos ventanaPlanesDePagos) {
		super(Mensajes.getInstancia().get("msg.colegio.obligaciones"));
		this.ventanaPlanesDePagos = ventanaPlanesDePagos;
		
		setSize((ANCHO) - 15 , LARGO_DATOS);
		
		grilla.setSize((ANCHO) - 40 , LARGO_GRILLA);
		grilla.setTamanioPagina(16);
	
		grilla.habilitarMenuContextual(new BotonBorrarPresionado(this), new BotonModificarObligacionPresionado(this));
		
		grilla.addSelectionChangeListener(new CambioEnLaSeleccionGrillaObligaciones(ventanaPlanesDePagos));
		
		agregarBotonAgregar();
		
		botonDuplicar = new MenuItem(Mensajes.getInstancia().get("msg.colegio.obligaciones.duplicar"), new SelectionListener<MenuEvent>() {
			@Override
			public void componentSelected(MenuEvent ce) {
				List seleccionados = getGrilla().getSelectionModel().getSelection();
				Obligacion obligacion = (Obligacion) seleccionados.get(0);
				
				obligacion.setProceso(ProcesosConst.CLONAR);
				
				Invocador.invocar(obligacion, new RetornoDeLlamada() {
					
					@Override
					public void procesado(Map<Object, Respuesta> respuestas) {
						Obligacion clon = (Obligacion)respuestas.get("clon").getPedido();
						clon.setNombre("Copia " + clon.getNombre());
						clon.setItem(null);
						grilla.agregarDato(clon); 
						grilla.load();
					}
					
					@Override
					public void fallo(Throwable error) {
						logger.error(error.getMessage());
						DialogError.mostrar("Error", Mensajes.getInstancia().get(error.getMessage()));
					}
				});
				
			}
		});
		botonDuplicar.setEnabled(Boolean.FALSE);
		grilla.getContextMenu().add(botonDuplicar);
		
		
	}
	
	@Override
	public ColumnModel getConfiguracionColumnas() {
		ColumnConfig columnNombre = new ColumnConfig("nombre", Mensajes.getInstancia().get("msg.colegio.obligaciones.nombre"), 197);
		ColumnConfig columnValor = new ColumnConfig("valor", Mensajes.getInstancia().get("msg.colegio.obligaciones.valor"), 80);
		columnValor.setAlignment(HorizontalAlignment.RIGHT);
		columnValor.setRenderer(new NumberCellRenderer("0.00"));
		ColumnConfig columnVencimiento = new ColumnConfig("vencimiento", Mensajes.getInstancia().get("msg.colegio.obligaciones.vencimiento"), 80);
		columnVencimiento.setDateTimeFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
		columnVencimiento.setAlignment(HorizontalAlignment.CENTER);
		
		ArrayList<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>();
		columnConfigs.add(columnNombre);
		columnConfigs.add(columnValor);
		columnConfigs.add(columnVencimiento);
		
		return new ColumnModel(columnConfigs);
	}

	@Override
	public String getNombreLista() {
		return "listaObligaciones";
	}

	@Override
	public void botonAgregarSeleccionado() {
		Ventana ventana = new VentanaObligaciones(grilla);
		ventana.show();
	}

}
